package br.com.pesca.bean;

import br.com.pesca.controller.TecnicoController;
import br.com.pesca.entity.Tecnico;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

@ViewScoped
@ManagedBean(name = "tecnicoBean")
public class TecnicoBean extends AbstractBean {

    private Tecnico tecnico;
    private TecnicoController tecnicoController;
    private List<Tecnico> tecnicosBuscados;
    private String buscaNome;

    public TecnicoBean() {
        tecnico = new Tecnico();
    }

    /**
     * Cria um novo técnico no sistema.
     * 
     * @return String
     */
    public String criarTecnico() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            getTecnicoController().criaTecnico(tecnico);
            closeDialog();
            context.getExternalContext().getFlash().setKeepMessages(true);
            context.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Sucesso!", "Técnico " + tecnico.getNome() + " foi cadastrado com sucesso!"));
            tecnico = new Tecnico();
            return "/pages/protected/admin/index.xhtml";
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Técnico não foi cadastrado. Tente novamente mais tarde.");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Atualiza/edita um técnico previamente cadastrado no sistema.
     */
    public void atualizarTecnico() {
        try {
            getTecnicoController().atualizarTecnico(tecnico);
            closeDialog();
            mensagemSucesso("Técnico " + tecnico.getNome() + " foi editado com sucesso!");
            tecnico = new Tecnico();
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Técnico " + tecnico.getNome() + " não foi editado. Tente novamente mais tarde.");
            e.printStackTrace();
        }
    }

    /**
     * Busca um técnico previamente cadastrado no sistema pelo seu nome.
     */
    public void buscarTecnico() {
        try {
            tecnicosBuscados = getTecnicoController().buscaNome(
                    buscaNome);
            if (tecnicosBuscados.isEmpty()) {
                mensagemVazia("Nenhum técnico foi encontrado.");
            }
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Não foi possível realizar a busca. Tente novamente mais tarde.");
            e.printStackTrace();
        }
    }

    /**
     * Instancia um novo pescador e anula as principais variáveis de navegação.
     */
    public void limpaTecnico() {
        tecnico = new Tecnico();
        tecnicosBuscados = null;
        buscaNome = "";
    }

    /*
     * GETTERS AND SETTERS
     */
    public TecnicoController getTecnicoController() {
        if (tecnicoController == null) {
            tecnicoController = new TecnicoController();
        }
        return tecnicoController;
    }

    public Tecnico getTecnico() {
        return tecnico;
    }

    public void setTecnico(Tecnico tecnico) {
        this.tecnico = tecnico;
    }

    public List<Tecnico> getTecnicosBuscados() {
        return tecnicosBuscados;
    }

    public void setTecnicosBuscados(List<Tecnico> tecnicosBuscados) {
        this.tecnicosBuscados = tecnicosBuscados;
    }

    public String getBuscaNome() {
        return buscaNome;
    }

    public void setBuscaNome(String buscaNome) {
        this.buscaNome = buscaNome;
    }

}
